#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
pair<int, int> ans[N];  // 定义pair来存答案
int n, q[N], z;         // z 是答案总数
string s;
bool vis[N],  // vis 是用来判断是否选过这个人
    f[N];     // f 数组表示是男是女(男是 true，女是 false)

struct node {
  int x, y, z;  // x 为其中一个舞者的编号，y 为另一个，z 为舞技之差
  friend bool operator>(node a, node b) {
    if (a.z == b.z) {
      return a.x > b.x;
    } else {
      return a.z > b.z;
    }
  }
};
priority_queue<node, vector<node>, greater<>> pru;
int main() {
  scanf("%d", &n);
  cin >> s;
  for (int i = 0; i < n; ++i) {
    if (s[i] == 'B') {
      f[i + 1] = true;
    } else {
      f[i + 1] = false;
    }
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &q[i]);
  }
  for (int i = 1; i < n; ++i) {
    // 不能男和男跳舞，女和女跳舞
    if (f[i] != f[i + 1]) {
      pru.push((node){i, i + 1, abs(q[i] - q[i + 1])});
    }
  }
  while (!pru.empty()) {
    int x = pru.top().x;       // 取出第一个人来
    int y = pru.top().y;       // 取出第二个人来
    pru.pop();                 // pop掉
    if (!vis[x] && !vis[y]) {  // 不能有人跳过舞了
      vis[x] = true;           // 改成跳过了
      vis[y] = true;
      ans[++z] = {x, y};  // 存答案
      // 再找一对儿相邻的入队
      // x 向左边，y 向右边(因为 x 小，y 大)
      while (x > 0 && vis[x])               // 跳过了或小于 0 都不行
        --x;                                // 往左边
      while (y <= n && vis[y])              // 跳过了或大于 n 都不行
        ++y;                                // 往右边
      if (x > 0 && y <= n && f[x] != f[y])  // 不能男和男或女和女啊
        pru.push((node){x, y, abs(q[x] - q[y])});
    }
  }
  printf("%d\n", z);  // 先输出总数
  for (int i = 1; i <= z; ++i) {
    printf("%d %d\n", ans[i].first, ans[i].second);  // 输出舞者
  }
  return 0;
}
